home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 August: Tool Chest / Dev.CD Aug 00 TC Disk 2.toast / pc / sample code / networking / pgpuam / sources / tasipkeypane.cp < prev    next >
Encoding:
Text File  |  2000-06-23  |  15.3 KB  |  494 lines

  1. //    TASIPKeyPane.cp - AppleShare IP Dialog Pane Object
  2. //
  3. // Apple Macintosh Developer Technical Support
  4. // Written by:  Vinnie Moscaritolo
  5. //
  6. //  Copyright (work in progress)  Apple Computer, Inc All rights reserved.
  7. //
  8. // You may incorporate this sample code into your applications without
  9. // restriction, though the sample code has been provided "AS IS" and the
  10. // responsibility for its operation is 100% yours.  However, what you are
  11. // not permitted to do is to redistribute the source as "DSC Sample Code"
  12. // after having made changes. If you're going to re-distribute the source,
  13. // we require that you make it clear in the source that the code was
  14. // descended from Apple Sample Code, but that you've made changes.
  15. // 
  16.  
  17. #include <Appearance.h>
  18. #include <Drag.h>
  19.  
  20. #include "TASIPKeyPane.h"
  21. #include "TPGPException.h"
  22.  
  23. static enum{
  24.     kServerAuthPaneDITL    = 140,
  25. };
  26.  
  27. enum {
  28.     kKeyDragBox  = 1 ,
  29.     kKeyInfoBox  ,
  30.     kKeyErrorBox,        // 15
  31.     kKeyDetailsBox,        // --        
  32.     kKeyNameTitle,        // 36
  33.      kKeyName,            // 27
  34.     kKeyTypeTitle,        // --
  35.      kKeyTypeData,        // 21
  36.     kKeySizeTitle,        // 16
  37.     kKeySizeData,        // 22
  38.     kTrustBox,            // 17
  39.     kCreateTitle,        // 18
  40.     kCreateDate    ,        // 24
  41.     kExpiresTitle,        // 19     expires
  42.     kExpireDate    ,        
  43.     kValidTitle,        
  44.     kValidValue    ,        
  45.     kUnTrustTitle, 
  46.     kFPBox,         
  47.     kFingerprint,     
  48.     kTrustedTitle,         
  49.     kInvalidTitle,         
  50.     kTrustValue,        
  51.     kExpiredIcon            
  52. };
  53.  
  54.  
  55. #define kKeyStringsID 129 
  56. static enum {
  57.     kKeyNameStrID      =1,
  58.     kKeyIDStrID ,
  59.     kKeyTypeStrID,
  60.     kKeySizeStrID,
  61.     kKeyCreatedStrID,
  62.     kKeyExpiresStrID,
  63.     kKeyExpiredStrID,
  64.     kKeyRevokedStrID,
  65.     kKeyInvalidStrID,
  66.     kKeyValidStrID,
  67.     kKeyTrustedStrID,
  68.     kKeyUnTrustedStrID,
  69.     kKeyServerKeyIsEnabled,
  70.     kKeyServerKeyIsDisabled,
  71.     kKeyServerKeyIsRevoked,
  72.     kKeyServerKeyIsExpired,
  73.     kKeyServerKeyNotFound,
  74.     
  75.      };
  76.      
  77.           
  78. // ---------------------------------------------------------------------------
  79. #pragma mark Local Prototypes
  80. // ---------------------------------------------------------------------------
  81.     static pascal OSErr KeyDragSendDataProc (FlavorType flavorType, void *context, ItemReference itemRef, DragReference dragRef);
  82.  
  83. #pragma mark -
  84.  
  85. // ---------------------------------------------------------------------------
  86. TASIPKeyPane::TASIPKeyPane( DialogPtr dialog, SInt16 items, TASIPPGPkey* serverKey)
  87.                     : TPane (dialog, items) 
  88. // ---------------------------------------------------------------------------
  89. //
  90. {    
  91.     ControlFontStyleRec    fontInfo;
  92.     ControlHandle        theControl;    
  93.     Str255                 text;
  94.  
  95.     fKey = serverKey;
  96.     
  97.      AppendDialogItemList(dialog, kServerAuthPaneDITL, overlayDITL );
  98.  
  99.     fontInfo.just = teJustRight;
  100.     fontInfo.flags = kControlUseFontMask | kControlUseJustMask;
  101.     fontInfo.font  = kControlFontSmallBoldSystemFont;
  102.  
  103.     // Key Name
  104.     GetIndString(text, kKeyStringsID,kKeyNameStrID);
  105.     GetDialogItemAsControl( dialog, items + kKeyNameTitle, &theControl );
  106.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  107.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  108.  
  109.     // Key Type
  110.     GetIndString(text, kKeyStringsID,kKeyTypeStrID);
  111.     GetDialogItemAsControl( dialog,  items +  kKeyTypeTitle, &theControl );
  112.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  113.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  114.  
  115.     // Key Size
  116.     GetIndString(text, kKeyStringsID,kKeySizeStrID);
  117.     GetDialogItemAsControl( dialog,  items + kKeySizeTitle, &theControl );
  118.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  119.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  120.  
  121.     // Key Creation
  122.     GetIndString(text, kKeyStringsID,kKeyCreatedStrID);
  123.     GetDialogItemAsControl( dialog,  items + kCreateTitle, &theControl );
  124.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  125.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  126.  
  127.     // Key Expiration
  128.     GetIndString(text, kKeyStringsID, kKeyExpiresStrID);
  129.     GetDialogItemAsControl( dialog,  items + kExpiresTitle, &fKeyExpiresTitle ); 
  130.     SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  131.     SetControlData( fKeyExpiresTitle, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  132.  
  133.     fontInfo.font = kControlFontSmallSystemFont;
  134.  
  135.     // Trust Model
  136.     GetIndString(text, kKeyStringsID,kKeyInvalidStrID);
  137.     GetDialogItemAsControl( dialog,  items + kInvalidTitle, &theControl );
  138.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  139.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  140.  
  141.     GetIndString(text, kKeyStringsID,kKeyUnTrustedStrID);
  142.     GetDialogItemAsControl( dialog,  items + kUnTrustTitle, &theControl );
  143.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  144.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  145.  
  146.     fontInfo.just = teJustLeft;
  147.  
  148.     GetDialogItemAsControl( dialog,  items + kKeyErrorBox, &theControl );
  149.     //     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  150.     HideControl(theControl);
  151.  
  152.     GetIndString(text, kKeyStringsID,kKeyValidStrID);
  153.     GetDialogItemAsControl( dialog,  items + kValidTitle, &theControl );
  154.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  155.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  156.  
  157.     GetIndString(text, kKeyStringsID,kKeyTrustedStrID);
  158.     GetDialogItemAsControl( dialog,  items + kTrustedTitle, &theControl );
  159.     SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1));
  160.     SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  161.  
  162.     GetDialogItemAsControl( dialog,  items + kCreateDate, &fKeyCreateDate );
  163.     SetControlData( fKeyCreateDate, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  164.  
  165.     GetDialogItemAsControl( dialog,  items + kExpireDate, &fKeyExpiredDate );
  166.     SetControlData( fKeyExpiredDate, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  167.  
  168.     GetDialogItemAsControl( dialog,  items + kKeySizeData, &fKeySize );
  169.     SetControlData( fKeySize, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  170.  
  171.     GetDialogItemAsControl( dialog,  items + kKeyTypeData, &fKeyType );
  172.     SetControlData( fKeyType, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  173.  
  174.     GetDialogItemAsControl( dialog,  items + kKeyName, &fKeyName );
  175.     SetControlData( fKeyName, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  176.  
  177.     fontInfo.just = teJustCenter;
  178.     GetDialogItemAsControl( dialog,  items + kFingerprint, &fFingerPrint );
  179.     SetControlData( fFingerPrint, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  180.  
  181.  
  182.     fontInfo.font = kControlFontSmallSystemFont;
  183.     fontInfo.flags = kControlUseFontMask;
  184.  
  185.     GetDialogItemAsControl( dialog,  items + kValidValue, &fKeyValidValue );
  186.     SetControlMinimum(fKeyValidValue, 0);
  187.     SetControlMaximum(fKeyValidValue, 2);
  188.  
  189.     GetDialogItemAsControl( dialog,  items + kTrustValue, &fKeyTrustValue );
  190.     SetControlMinimum(fKeyTrustValue, 0);
  191.     SetControlMaximum(fKeyTrustValue, 2);
  192.  
  193.     fontInfo.font  = kControlFontSmallBoldSystemFont;
  194.     fontInfo.flags = kControlUseFontMask;
  195.       GetDialogItemAsControl( dialog, items + kKeyInfoBox,     &fKeyInfoBox );
  196.       SetControlData( fKeyInfoBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  197.       
  198.     GetDialogItemAsControl( dialog, items + kTrustBox,         &fKeyTrustBox );
  199.      SetControlData( fKeyTrustBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  200.      
  201.     GetDialogItemAsControl( dialog, items + kFPBox,         &fKeyFPBox );
  202.      SetControlData( fKeyFPBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo);
  203.  
  204.      GetDialogItemAsControl( dialog, items + kExpiredIcon,     &fKeyExpiredIcon );
  205.     GetDialogItemAsControl( dialog, items + kKeyDetailsBox, &fKeyDetailsBox );
  206.     GetDialogItemAsControl( dialog, items + kKeyDragBox, &fKeyDragBox );
  207. }
  208.  
  209.  
  210.  
  211.  
  212. // ---------------------------------------------------------------------------
  213. TASIPKeyPane::~TASIPKeyPane()
  214. // ---------------------------------------------------------------------------
  215. //
  216. {     
  217.      ShortenDITL( fDialog, CountDITL(fDialog) - fOrigItems);
  218. }
  219.  
  220. // ---------------------------------------------------------------------------
  221. void TASIPKeyPane::Idle(void)
  222. // ---------------------------------------------------------------------------
  223. //
  224. {     
  225.  
  226. }
  227.  
  228.  
  229.  
  230.  
  231.  
  232. // ---------------------------------------------------------------------------
  233. void TASIPKeyPane::Refresh(void)
  234. // ---------------------------------------------------------------------------
  235. //
  236. {     
  237.     ControlFontStyleRec    fontInfo;
  238.     Size                theSize;
  239.     Str255                 buffer;
  240.  
  241.     
  242.      if( fKey->IsOperational() )
  243.     {    
  244.                 
  245. // Hide Error Message
  246. //            GetDialogItemAsControl( fDialog, kKeyErrorBox, &theControl );
  247. //            HideControl(theControl);
  248.      
  249.  
  250. // Key User Name
  251.         fKey->GetPrimaryUserNamePString( (StringPtr)buffer);
  252.         SetControlData( fKeyName, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  253.  
  254. //    key Fingerprint     
  255.         fKey->GetFingerprintPString( (StringPtr)buffer);
  256.         SetControlData( fFingerPrint, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  257.  
  258. // Key type
  259.         fKey->GetPublicKeyAlgorithmPstring ( (StringPtr)buffer);
  260.         SetControlData( fKeyType, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  261.         
  262. // Key Size
  263.         NumToString(fKey->GetKeySize(), buffer);
  264.         SetControlData( fKeySize, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  265.  
  266. // created
  267.           DateString( fKey->GetCreateDate() , shortDate, buffer, nil);
  268.         SetControlData( fKeyCreateDate, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  269.  
  270.  
  271. // expiration
  272.         if( fKey->IsRevoked() )
  273.         {
  274.         // revoked
  275.              SetControlVisibility(fKeyExpiredIcon,true, true);
  276.             GetIndString(buffer, kKeyStringsID, kKeyRevokedStrID);
  277.             SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  278.             HideControl(fKeyExpiredDate);
  279.         }
  280.         else
  281.         {
  282.         // expired
  283.             SetControlVisibility(fKeyExpiredIcon, fKey->IsExpired() , true);
  284.     
  285.             GetIndString(buffer, kKeyStringsID,  fKey->IsExpired() ?kKeyExpiredStrID:kKeyExpiresStrID);
  286.             SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  287.                  
  288.              if( fKey->GetExpireDate()  != kPGPExpirationTime_Never)
  289.                 DateString(fKey->GetExpireDate() , shortDate, buffer, nil);
  290.             else
  291.                 PLstrcpy(buffer, "\pnever");
  292.              SetControlData( fKeyExpiredDate, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1));
  293.              ShowControl(fKeyExpiredDate);
  294.         }
  295.               
  296.      // key validity
  297.         switch(fKey->GetValidity())
  298.         {
  299.             default:
  300.             case kPGPValidity_Unknown:
  301.             case kPGPValidity_Invalid:
  302.                  SetControlValue(fKeyValidValue, 0 );
  303.                 break;
  304.             case kPGPValidity_Marginal:
  305.                  SetControlValue(fKeyValidValue, 1 );
  306.                 break;
  307.             case kPGPValidity_Complete:
  308.                  SetControlValue(fKeyValidValue, 2 );
  309.                 break;
  310.         }
  311.  
  312.                 
  313.     // key trust    
  314.         SetControlValue(fKeyTrustValue,   fKey->IsAxiomatic() ? 3 : fKey->GetTrustLevel());
  315.  
  316.     // set the server key title Info
  317.         GetIndString(buffer, kKeyStringsID,
  318.                         fKey->IsRevoked() ? kKeyServerKeyIsRevoked: 
  319.                         fKey->IsExpired() ? kKeyServerKeyIsExpired:
  320.                         fKey->IsDisabled()? kKeyServerKeyIsDisabled:kKeyServerKeyIsEnabled);
  321.         SetControlTitle(fKeyInfoBox, buffer);
  322.  
  323.         ShowControl(fKeyDetailsBox);
  324.         ShowControl(fKeyFPBox);
  325.         ShowControl(fKeyTrustBox);
  326.  
  327.     // if key is disabled grey out the boxes
  328.     
  329.            if( fKey->IsDisabled()) 
  330.            {
  331.             DeactivateControl(fKeyInfoBox);
  332.             DeactivateControl(fKeyFPBox);
  333.            }
  334.          else
  335.          {
  336.             ActivateControl(fKeyInfoBox);
  337.             ActivateControl(fKeyFPBox);
  338.         }
  339.  
  340.     // if key is expired or revoked then the trust is meaningless.
  341.         if( fKey->IsExpired() | fKey->IsRevoked() | fKey->IsDisabled()) 
  342.              DeactivateControl(fKeyTrustBox);
  343.         else ActivateControl(fKeyTrustBox);
  344.  
  345.     }
  346.     else
  347.     {
  348.         GetIndString(buffer, kKeyStringsID, kKeyServerKeyNotFound);
  349.         SetControlTitle(fKeyInfoBox, buffer);
  350.  
  351.         DeactivateControl(fKeyInfoBox);
  352.         ShowControl(fKeyFPBox);
  353.         DeactivateControl(fKeyFPBox);
  354.         HideControl(fKeyTrustBox);
  355.  
  356.         
  357. //        HideControl(fFingerPrint);
  358. //        HideControl(fKeyFPBox);
  359.             
  360. //         DeactivateControl(fKeyDetailsBox);
  361.  
  362. /*        Str255         errorMsg, errorMsg2;
  363.         Str63        keyName ;
  364.  
  365.         fKey->GetKeyNamePString(keyName);
  366.  
  367.         GetDialogItemAsControl( fDialog, kKeyName, &theControl );
  368.         HideControl(theControl);
  369.  
  370.         GetDialogItemAsControl( fDialog, kKeyDetailsBox, &theControl );
  371.         HideControl(theControl);
  372.  
  373.         GetIndString(errorMsg, kDialogStringsID, kServerKeyNotFoundErrorMsg1);
  374.         PLstrcat(errorMsg,  keyName);
  375.         GetIndString(errorMsg2, kDialogStringsID, kServerKeyNotFoundErrorMsg2);
  376.         PLstrcat(errorMsg, errorMsg2);
  377.          
  378.         GetDialogItemAsControl( fDialog, kKeyErrorBox, &theControl );
  379.         SetControlData( theControl, 0, kControlStaticTextTextTag, errorMsg[0], (Ptr)(errorMsg+1));
  380.         ShowControl(theControl);
  381. */
  382.     }
  383.  
  384. }
  385.  
  386. // ---------------------------------------------------------------------------
  387. Boolean TASIPKeyPane::HandleMouseDown(EventRecord *event)
  388. // ---------------------------------------------------------------------------
  389. //
  390. {     
  391.     OSErr         err       = noErr;
  392.     Point         here     = event->where;
  393.     Boolean     handled;
  394.     
  395.     GlobalToLocal(&here);
  396.     
  397.     if( (handled = PtInRect (here , &(**fKeyDragBox).contrlRect))    // is it in our space
  398.         && ( NewDrag != nil)                                        // check if drag supported?
  399.         &&( fKey && fKey->IsOperational())                            // its a good key
  400.         && (WaitMouseMoved (event->where)))                            // user has moved out of drag box
  401.     {
  402.         DragSendDataUPP     dragSendDataProcUPP = NewDragSendDataProc (KeyDragSendDataProc);    
  403.         DragReference         dragRef;
  404.         if (!(err = NewDrag (&dragRef)))
  405.             {
  406.                 Point         globalPoint = {0,0};
  407.                 RgnHandle     dragRgn = NewRgn();
  408.                 RgnHandle    tempRgn = NewRgn();
  409.                 
  410.                 LocalToGlobal (&globalPoint);
  411.                 
  412.                 SetDragSendProc (dragRef,dragSendDataProcUPP,fKey);
  413.                 AddDragItemFlavor(dragRef, 0, 'TEXT', nil ,0 , nil);
  414.                 AddDragItemFlavor(dragRef, 0, kFlavorTypeClippingName, nil ,0 , nil);
  415.                 
  416.                  RectRgn(tempRgn, &(**fKeyDragBox).contrlRect);
  417.                 CopyRgn(tempRgn,dragRgn);
  418.                 InsetRgn(tempRgn,1,1);
  419.                  DiffRgn(dragRgn,tempRgn, dragRgn);
  420.                 OffsetRgn(dragRgn, globalPoint.h, globalPoint.v);
  421.                  TrackDrag (dragRef,event,dragRgn);
  422.  
  423.                 DisposeRgn (tempRgn);
  424.                 DisposeRgn (dragRgn);
  425.                 DisposeDrag (dragRef);
  426.             }
  427.  
  428.         DisposeRoutineDescriptor(dragSendDataProcUPP);
  429.     }
  430.     return handled;
  431. }
  432.  
  433.  
  434. // ---------------------------------------------------------------------------
  435. void TASIPKeyPane::ItemHit(SInt16 item)
  436. // ---------------------------------------------------------------------------
  437. //
  438. {     
  439.     SInt16        localItem;
  440.     OSErr         err = noErr;
  441.     
  442.     localItem = item - fOrigItems;
  443.  
  444.      switch ( localItem )
  445.     {
  446.         case kKeyDragBox:
  447.  
  448.             
  449.         break;
  450.         
  451.     }
  452.  
  453. }
  454.  
  455.  
  456.  
  457. // ---------------------------------------------------------------------------
  458. static pascal OSErr KeyDragSendDataProc (FlavorType flavorType, void *context, ItemReference itemRef, DragReference dragRef)
  459. // ---------------------------------------------------------------------------
  460. //
  461. {
  462.  
  463.     TPGPkey*     theKey = (TPGPkey*)context;
  464.     OSErr         err = noErr;
  465.     
  466.     
  467.     switch(flavorType)
  468.     {
  469.         case 'TEXT':
  470.             {
  471.                 Str255         keyName;
  472.                 void*         buf = nil;
  473.                 PGPSize     bufSize;
  474.  
  475.                 theKey->Export(&buf,&bufSize);
  476.                 theKey->GetPrimaryUserNamePString(keyName);
  477.  
  478.                 SetDragItemFlavorData(dragRef, itemRef, 'TEXT', buf ,bufSize , nil);
  479.                 SetDragItemFlavorData(dragRef, itemRef, kFlavorTypeClippingName, (Ptr)(keyName+1) , keyName[0], nil);
  480.                 PGPFreeData(buf);
  481.             }
  482.             break;
  483.             
  484.         default:
  485.             break;
  486.     }
  487.     
  488.  
  489.     return err;
  490. }    
  491.  
  492. #pragma mark -
  493.  
  494.